﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//请你来实现一个 myAtoi(string s) 函数，使其能将字符串转换成一个 32 位有符号整数（类似 C / C++ 中的 atoi 函数）。
//
//函数 myAtoi(string s) 的算法如下：
//
//读入字符串并丢弃无用的前导空格
//检查下一个字符（假设还未到字符末尾）为正还是负号，读取该字符（如果有）。 确定最终结果是负数还是正数。 如果两者都不存在，则假定结果为正。
//读入下一个字符，直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
//将前面步骤读入的这些数字转换为整数（即，"123" -> 123， "0032" -> 32）。如果没有读入数字，则整数为 0 。必要时更改符号（从步骤 2 开始）。
//如果整数数超过 32 位有符号整数范围[−231, 231 − 1] ，需要截断这个整数，使其保持在这个范围内。具体来说，小于 −231 的整数应该被固定为 −231 ，大于 231 − 1 的整数应该被固定为 231 − 1 。
//返回整数作为最终结果。
//https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/description/
//class Solution
//{
//public:
//
//    int myAtoi(string str)
//    {
//        int i = 0;
//        //检查有没有前导空格
//        while (str[i] == ' ')
//        {
//            i++;
//        }
//        //检查正负
//        int j = 1;
//        if (str[i] == '-')
//        {
//            j = -1;
//            i++;
//        }
//        else if (str[i] == '+')
//        {
//            i++;
//        }
//        //读取字符
//        string temp;
//        while (str[i] > 47 && str[i] < 58)
//        {
//            temp += str[i];
//            i++;
//        }
//        //计算整数
//        int num = 0;
//        for (i = 0; i < temp.size(); i++)
//        {
//            if (num > INT_MAX / 10 || num == INT_MAX / 10 && temp[i] > '7')
//                return j == 1 ? INT_MAX : INT_MIN;
//            num = num * 10 + (temp[i] - '0');
//        }
//        return num * j;
//    }
//};
//int main()
//{
//    Solution str;
//    cout << str.myAtoi("4193 with words");
//}

//给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。
//
//你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。
//https ://leetcode.cn/problems/add-strings/description/
//class Solution {
//public:
//    string addStrings(string num1, string num2)
//    {
//        int i = num1.size() - 1;
//        int j = num2.size() - 1;
//        int next = 0;
//        string sum;
//        int temp;
//        while (i >= 0 || j >= 0)
//        {
//            int val1 = i < 0 ? 0 : num1[i--] - '0';
//            int val2 = j < 0 ? 0 : num2[j--] - '0';
//            temp = val1 + val2 + next;
//            sum += (temp % 10 + '0');
//            next = (temp) / 10;
//        }
//        if (next == 1)
//            sum += '1';
//        reverse(sum.begin(), sum.end());
//        return sum;
//    }
//};